package com.afdor.rws.dtm.entities;

import com.afdor.rws.dtm.transaction.ExecutionMode;
import com.afdor.rws.dtm.transaction.Isolation;
import com.afdor.rws.dtm.transaction.Propagation;
import com.afdor.rws.dtm.transaction.Status;

import java.io.Serializable;

/**
 * 二阶段分布式事务信息定义
 *
 * @author 悭梵
 * @date Created in 2018-10-12 11:36
 */
public interface DistributedTransactionDefinition extends Serializable {

    /**
     * Use the default timeout of the underlying transaction system,
     * or none if timeouts are not supported.
     */
    int TIMEOUT_DEFAULT = -1;

    /**
     * 事务超时时间
     *
     * @return
     */
    int getTimeout();

    /**
     * 是否开启只读事务
     *
     * @return
     */
    boolean isReadOnly();

    /**
     * 事务隔离级别
     *
     * @return
     * @see com.afdor.rws.dtm.transaction.Isolation
     */
    Isolation getIsolation();

    /**
     * 事务传播性
     *
     * @return
     * @see com.afdor.rws.dtm.transaction.Propagation
     */
    Propagation getPropagation();

    /**
     * 事物执行方式
     *
     * @return
     */
    ExecutionMode getExecutionMode();

    /**
     * 事务唯一标识
     *
     * @return
     */
    String getTransactionId();

    /**
     * 得到分布式事务事务执行器，用于激活事务执行
     *
     * @return
     */
    DistributedTransactionInvocation getInvocation();

    /**
     * 设置事务的状态
     *
     * @param status
     */
    DistributedTransactionDefinition setStatus(Status status);

    /**
     * 获取事务当前状态
     *
     * @return
     */
    Status getStatus();

    // TODO 事务补偿时考虑用新对象，在此需要生成对应补偿事务对象

}
